﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;
using AcadPos.Entity;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBEstado
    {
        #region Lista todos os Estados
        public DataTable listaTodosEstados()
        {
            string SQL = @"SELECT  te.ID_ESTADO,
                                   LTRIM(RTRIM(te.ESTADO)) AS ESTADO,
                                   te.SITUACAO AS STATUS
                            FROM   TB_ESTADO te 
                            ORDER BY te.ESTADO";
            DataAccess db = new DataAccess(SQL);            
            return db.GetDataTable();
        }
        #endregion

        #region Listar Estados
        public DataTable listarEstados(string pEstado)
        {
            string SQL = @"SELECT  te.ID_ESTADO,
                                   LTRIM(RTRIM(te.ESTADO)) AS ESTADO,
                                   te.SITUACAO AS STATUS                               
                            FROM   TB_ESTADO te
                            WHERE te.ESTADO LIKE '%' + @ESTADO + '%' 
                            ORDER BY te.ESTADO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ESTADO", SqlDbType.VarChar, pEstado);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Estado
        public DataTable estadoJaExiste(string pEstado)
        {
            string SQL = @"SELECT  te.ID_ESTADO

                    FROM   TB_ESTADO te
    
                    WHERE UPPER(te.ESTADO) = UPPER(@ESTADO) ";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ESTADO", SqlDbType.VarChar, pEstado);
            return db.GetDataTable();
        }
        #endregion

        #region Incluir Estado
        public bool incluirEstado(Estado estado, string usuario)
        {
            string SQL = @"INSERT INTO TB_ESTADO
                              (
                                ESTADO,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                UPPER(@ESTADO),
                                @SITUACAO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ESTADO", SqlDbType.VarChar, estado.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, estado.Status);
            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();
            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_ESTADO',
                        ((SELECT CAST(MAX(ID_ESTADO) AS VARCHAR) FROM TB_ESTADO) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@DESCRICAO", SqlDbType.VarChar, estado.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, estado.Status);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar Estado
        public bool alterarEstado(Estado estado, string usuario)
        {
            string SQL = @"UPDATE TB_ESTADO
                            SET    [ESTADO]   = @ESTADO,
                                   SITUACAO   = @SITUACAO
                            WHERE  ID_ESTADO  = @ID_ESTADO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ESTADO", SqlDbType.VarChar, estado.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, estado.Status);
            db.AddParam("@ID_ESTADO", SqlDbType.Int, estado.IdEstado);
            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_ESTADO',
                        (CAST(@ID_ESTADO AS VARCHAR) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_ESTADO", SqlDbType.Int, estado.IdEstado);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, estado.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, estado.Status);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Estado
        public bool excluirEstado(Estado estado, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_ESTADO
                            WHERE  ID_ESTADO = @ID_ESTADO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_ESTADO", SqlDbType.Int, estado.IdEstado);
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();
            
            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_ESTADO',
                        (CAST(@ID_ESTADO AS VARCHAR) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_ESTADO", SqlDbType.Int, estado.IdEstado);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, estado.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, estado.Status);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Carregar Dados do Estado
        public Estado carregarDadosEstado(int pCodEstado)
        {
            string SQL = @"SELECT te.ID_ESTADO,
                                   LTRIM(RTRIM(te.ESTADO)) AS ESTADO,
                                   te.SITUACAO AS STATUS
                            FROM   TB_ESTADO te
                            WHERE te.ID_ESTADO = @ID_ESTADO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_ESTADO", SqlDbType.Int, pCodEstado);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Estado estado = new Estado();
                if (dr.Read())
                {
                    estado.IdEstado = pCodEstado;
                    estado.Descricao = dr["ESTADO"].ToString();
                    estado.Status = dr["STATUS"].ToString();                    
                }
                db.FecharConexao();
                return estado;
            }
            catch
            {
                return null;
            }
        }
        #endregion        

        #region Carregar Dados do Estado SE
        public Estado carregarDadosEstadoSE()
        {
            string SQL = @"SELECT te.ID_ESTADO,
                                   LTRIM(RTRIM(te.ESTADO)) AS ESTADO,
                                   te.SITUACAO AS STATUS
                            FROM   TB_ESTADO te  
                            WHERE LTRIM(RTRIM(te.ESTADO)) = 'SE'";
            DataAccess db = new DataAccess(SQL);           
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Estado estado = new Estado();
                if (dr.Read())
                {
                    estado.IdEstado = Convert.ToInt32(dr["ID_ESTADO"].ToString());
                    estado.Descricao = dr["ESTADO"].ToString();
                    estado.Status = dr["STATUS"].ToString();
                }
                else
                    estado.IdEstado = 0;
                db.FecharConexao();
                return estado;
            }
            catch
            {
                return null;
            }
        }
        #endregion
    }
}
